﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _06._12._2016
{
    class Program
    {
        static void Main(string[] args)
        {
            FindRowWithMaxSum();
        }

        static int [,] CreateAndFillRandomlyTwoDimentionArray (int rowCount, int columnCount, int rndMinValue, int rndMaxValue)
        {
            int[,] twoDimentionArray = new int[rowCount, columnCount];
            Random rnd = new Random(); 
            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {
                    twoDimentionArray[i,j] = rnd.Next(rndMinValue, rndMaxValue+1);
                }

            }
            return twoDimentionArray;
        }

        static void PrintTwoDimwntionArrayToConsole (int[,] arrayForPrint)
        {
            for (int i = 0; i < arrayForPrint.GetLength(0); i++)
            {
                for (int j = 0; j < arrayForPrint.GetLength(1); j++)
                {
                    Console.Write("{0}\t", arrayForPrint[i,j]);
                }
                Console.WriteLine();
            }
        }
        static void ReplaceEveryFiveElementWithSumOfAnotherFour ()
            {
            
            int[,] array = CreateAndFillRandomlyTwoDimentionArray(4, 5, 1, 10);
            PrintTwoDimwntionArrayToConsole(array);
        int sum = 0;
            for (int i = 0; i< 4; i++)
            {
                for (int j = 0; j< 5; j++)
                {
                    if (j == 4)
                    {
                        array[i, j] = sum;
                    }
                    else
                    {
                        //sum = array[i, 0] + array[i, 1] + array[i, 2] + array [i, 3];
                        sum += array[i, j];
                    }
                }
                sum = 0;


            }
            Console.WriteLine();
            PrintTwoDimwntionArrayToConsole(array);

            }


        static void PrintMonthCalendarToConsole()
        {
            Console.WriteLine("Введите количество дней в месяце:");
            int numberOfDays = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите день недели, с которого начинается месяц (1-пн, ..., 7-вс):");
            int firstDayOfWeek = Int32.Parse(Console.ReadLine());
            int[,] month = new int[6, 7];
            int dayCounter = 1;
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 7; j++)
                {

                    if (i == 0)
                    {
                        if (j >= (firstDayOfWeek - 1))
                        {
                            month[i, j] = dayCounter;
                            dayCounter += 1;
                        }
                        else
                            month[i, j] = 0;
                    }
                    else
                    {
                        if (dayCounter <= numberOfDays)
                        {
                            month[i, j] = dayCounter;
                            dayCounter += 1;
                        }
                        else if (dayCounter >= 31)
                            break;
                        else
                            month[i, j] = 0;
                    }
                }
            }
            for (int i = 0; i < month.GetLength(0); i++)
            {
                for (int j = 0; j < month.GetLength(1); j++)
                {
                    if (month[i, j] == 0)
                        Console.Write(" \t");
                    else
                        Console.Write("{0}\t", month[i, j]);
                }
                    Console.WriteLine();
            }

        }
        static void FindMainDiagonalSumAndPrintToConsole ()
        {
            Console.WriteLine("Введите размер массива:");
            int arraySize = Int32.Parse(Console.ReadLine());
            int [,] squareArray = CreateAndFillRandomlyTwoDimentionArray(arraySize, arraySize, -100, 100);
            int sum = 0;
            for (int i = 0; i < squareArray.GetLength(0); i++)
            {
                for (int j = 0; j < squareArray.GetLength(1); j++)
                {
                    if (i == j)
                        sum += squareArray[i, j];
                }
            }
            PrintTwoDimwntionArrayToConsole(squareArray);
            Console.WriteLine("Сумма элементов главной диагонали - {0}", sum);
        }

        static void FindEvenOddArrayElements()
        {
            Console.WriteLine("Введите количество строк в массиве:");
            int row = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите введите количество столбцов в массиве");
            int column = Int32.Parse(Console.ReadLine());
            int [,] array = CreateAndFillRandomlyTwoDimentionArray(row, column, 1, 20);
            int oddSum = 0;
            int evenSum = 0;
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < column; j++)
                {
                    if (array[i, j] % 2 == 0)
                        evenSum += 1;
                    else
                        oddSum += 1;
                }
            }
            PrintTwoDimwntionArrayToConsole(array);
            Console.WriteLine("Количество чётных элементов - {0}, нечётных - {1}", evenSum, oddSum);

        }

        static void FindMaxOfMinElements ()
        {
            //Needs improve. Works only if columns >= rows :(
            Console.WriteLine("Введите количество строк в массиве:");
            int row = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите введите количество столбцов в массиве");
            int column = Int32.Parse(Console.ReadLine());
            int[,] array = CreateAndFillRandomlyTwoDimentionArray(row, column, 1, 5);
            int min = Int32.MaxValue;
            int max = Int32.MinValue;
            int[] testArray = new int[row];
            for (int j = 0; j < column; j++)
            {
                for (int i = 0; i < row; i++)
                {
                    if (array[i, j] < min)
                        min = array[i, j];
                }
                testArray[j] = min;
            }
            for (int i = 0; i < row; i++)
            {
                if (testArray[i] > max)
                    max = testArray[i];
            }
            PrintTwoDimwntionArrayToConsole(array);
            Console.Write("Максимальный из минимальных элементов - {0}", max);
            Console.WriteLine();
        }

        static void SumRowsAndColumns ()
        {
            Console.WriteLine("Введите количество строк в массиве:");
            int row = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите введите количество столбцов в массиве");
            int column = Int32.Parse(Console.ReadLine());
            int[,] array = CreateAndFillRandomlyTwoDimentionArray(row, column, 1, 20);
            PrintTwoDimwntionArrayToConsole(array);
            int tempRows = 0;
            int tempColumns = 0;
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < column; j++)
                {
                    tempRows += array[i, j];
                } 
                Console.WriteLine("Сумма элементов строки {0} - {1}", i + 1, tempRows);
                tempRows = 0;
            }

            for (int j = 0; j < row; j++)
            {
                for (int i = 0; i < column; i++)
                {
                    tempColumns += array[i, j];
                }
                Console.WriteLine("Сумма элементов столбца {0} - {1}", j + 1, tempColumns);
                tempColumns = 0;
            }

        }
        static void FindRowWithMaxSum()
        {
            Console.WriteLine("Введите количество строк в массиве:");
            int row = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите введите количество столбцов в массиве");
            int column = Int32.Parse(Console.ReadLine());
            int[,] array = CreateAndFillRandomlyTwoDimentionArray(row, column, 1, 5);
            PrintTwoDimwntionArrayToConsole(array);
            int[] testArray = new int[row];
            int sum = 0;
            for (int j = 0; j < column; j++)
            {
                for (int i = 0; i < row; i++)
                {
                    sum += array[j, i];
                }
                testArray[j] = sum;
                sum = 0;
            }
            int max = Int32.MinValue;
            for (int i = 0; i < column; i++)
            {
                if (testArray[i] > max)
                    max = testArray[i];
            }
            int maxToPrint = Array.IndexOf(testArray, max);
            Console.WriteLine("Номер строки с максимальной суммой - {0}", maxToPrint + 1);
        }

        static void PrintArrayToConsole(int[] arrayForPrint)
        {
            for (int i = 0; i < arrayForPrint.GetLength(0); i++)
            {
                Console.Write("{0}\t", arrayForPrint[i]);
            }
        }

    }

}
